#pragma once
#include "../CGIResource.h"
namespace Alice
{
    class VulkanDevice;
    struct FUniformBufferGatherInfo
    {
    };
    class FVulkanDescriptorSetsLayoutInfo
    {
    public:
        uint32 Hash = 0;
        uint32 TypesUsageID = ~0;
        VkPipelineBindPoint BindPoint = VK_PIPELINE_BIND_POINT_MAX_ENUM;
        inline uint32 GetTypesUsageID() const
        {
            return TypesUsageID;
        }
        void GenerateHash(const CGISamplerState* ImmutableSamplers, VkPipelineBindPoint InBindPoint);
        void AddDescriptor(int32 DescriptorSetIndex, const VkDescriptorSetLayoutBinding& Descriptor);
        template<bool bIsCompute>
        void FinalizeBindings(const VulkanDevice& inDevice, const FUniformBufferGatherInfo& UBGatherInfo, const CGISamplerState* ImmutableSamplers, bool bUsesBindless);
    };
    class FVulkanDescriptorSetsLayout : public FVulkanDescriptorSetsLayoutInfo
    {
    public:
	    VulkanDevice* Device;
        VkDescriptorSetAllocateInfo DescriptorSetAllocateInfo;
        inline uint32 GetHash() const
        {
            return Hash;
        }
    };
}